#include "citydata.h"

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>
#include <QTextStream>

/*const static QString cityDataJsonString = R"({
    "城市代码": [{
            "省": "北京",
            "市": [{
                    "市名": "北京",
                    "编码": "101010100"
                },
                {
                    "市名": "朝阳",
                    "编码": "101010300"
                },
                {
                    "市名": "顺义",
                    "编码": "101010400"
                },
                {
                    "市名": "怀柔",
                    "编码": "101010500"
                },
                {
                    "市名": "通州",
                    "编码": "101010600"
                },
                {
                    "市名": "昌平",
                    "编码": "101010700"
                },
                {
                    "市名": "延庆",
                    "编码": "101010800"
                },
                {
                    "市名": "丰台",
                    "编码": "101010900"
                },
                {
                    "市名": "石景山",
                    "编码": "101011000"
                },
                {
                    "市名": "大兴",
                    "编码": "101011100"
                },
                {
                    "市名": "房山",
                    "编码": "101011200"
                },
                {
                    "市名": "密云",
                    "编码": "101011300"
                },
                {
                    "市名": "门头沟",
                    "编码": "101011400"
                },
                {
                    "市名": "平谷",
                    "编码": "101011500"
                },
                {
                    "市名": "八达岭",
                    "编码": "101011600"
                },
                {
                    "市名": "佛爷顶",
                    "编码": "101011700"
                },
                {
                    "市名": "汤河口",
                    "编码": "101011800"
                },
                {
                    "市名": "密云上甸子",
                    "编码": "101011900"
                },
                {
                    "市名": "斋堂",
                    "编码": "101012000"
                },
                {
                    "市名": "霞云岭",
                    "编码": "101012100"
                },
                {
                    "市名": "北京城区",
                    "编码": "101012200"
                },
                {
                    "市名": "海淀",
                    "编码": "101010200"
                }
            ]
        },
        {
            "省": "天津市",
            "市": [{
                    "市名": "天津",
                    "编码": "101030100"
                },
                {
                    "市名": "宝坻",
                    "编码": "101030300"
                },
                {
                    "市名": "东丽",
                    "编码": "101030400"
                },
                {
                    "市名": "西青",
                    "编码": "101030500"
                },
                {
                    "市名": "北辰",
                    "编码": "101030600"
                },
                {
                    "市名": "蓟县",
                    "编码": "101031400"
                },
                {
                    "市名": "汉沽",
                    "编码": "101030800"
                },
                {
                    "市名": "静海",
                    "编码": "101030900"
                },
                {
                    "市名": "津南",
                    "编码": "101031000"
                },
                {
                    "市名": "塘沽",
                    "编码": "101031100"
                },
                {
                    "市名": "大港",
                    "编码": "101031200"
                },
                {
                    "市名": "武清",
                    "编码": "101030200"
                },
                {
                    "市名": "宁河",
                    "编码": "101030700"
                }
            ]
        },
        {
            "省": "上海",
            "市": [{
                    "市名": "上海",
                    "编码": "101020100"
                },
                {
                    "市名": "宝山",
                    "编码": "101020300"
                },
                {
                    "市名": "嘉定",
                    "编码": "101020500"
                },
                {
                    "市名": "南汇",
                    "编码": "101020600"
                },
                {
                    "市名": "浦东",
                    "编码": "101021300"
                },
                {
                    "市名": "青浦",
                    "编码": "101020800"
                },
                {
                    "市名": "松江",
                    "编码": "101020900"
                },
                {
                    "市名": "奉贤",
                    "编码": "101021000"
                },
                {
                    "市名": "崇明",
                    "编码": "101021100"
                },
                {
                    "市名": "徐家汇",
                    "编码": "101021200"
                },
                {
                    "市名": "闵行",
                    "编码": "101020200"
                },
                {
                    "市名": "金山",
                    "编码": "101020700"
                }
            ]
        },
        {
            "省": "河北",
            "市": [{
                    "市名": "石家庄",
                    "编码": "101090101"
                },
                {
                    "市名": "张家口",
                    "编码": "101090301"
                },
                {
                    "市名": "承德",
                    "编码": "101090402"
                },
                {
                    "市名": "唐山",
                    "编码": "101090501"
                },
                {
                    "市名": "秦皇岛",
                    "编码": "101091101"
                },
                {
                    "市名": "沧州",
                    "编码": "101090701"
                },
                {
                    "市名": "衡水",
                    "编码": "101090801"
                },
                {
                    "市名": "邢台",
                    "编码": "101090901"
                },
                {
                    "市名": "邯郸",
                    "编码": "101091001"
                },
                {
                    "市名": "保定",
                    "编码": "101090201"
                },
                {
                    "市名": "廊坊",
                    "编码": "101090601"
                }
            ]
        },
        {
            "省": "河南",
            "市": [{
                    "市名": "郑州",
                    "编码": "101180101"
                },
                {
                    "市名": "新乡",
                    "编码": "101180301"
                },
                {
                    "市名": "许昌",
                    "编码": "101180401"
                },
                {
                    "市名": "平顶山",
                    "编码": "101180501"
                },
                {
                    "市名": "信阳",
                    "编码": "101180601"
                },
                {
                    "市名": "南阳",
                    "编码": "101180701"
                },
                {
                    "市名": "开封",
                    "编码": "101180801"
                },
                {
                    "市名": "洛阳",
                    "编码": "101180901"
                },
                {
                    "市名": "商丘",
                    "编码": "101181001"
                },
                {
                    "市名": "焦作",
                    "编码": "101181101"
                },
                {
                    "市名": "鹤壁",
                    "编码": "101181201"
                },
                {
                    "市名": "濮阳",
                    "编码": "101181301"
                },
                {
                    "市名": "周口",
                    "编码": "101181401"
                },
                {
                    "市名": "漯河",
                    "编码": "101181501"
                },
                {
                    "市名": "驻马店",
                    "编码": "101181601"
                },
                {
                    "市名": "三门峡",
                    "编码": "101181701"
                },
                {
                    "市名": "济源",
                    "编码": "101181801"
                },
                {
                    "市名": "安阳",
                    "编码": "101180201"
                }
            ]
        },
        {
            "省": "安徽",
            "市": [{
                    "市名": "合肥",
                    "编码": "101220101"
                },
                {
                    "市名": "芜湖",
                    "编码": "101220301"
                },
                {
                    "市名": "淮南",
                    "编码": "101220401"
                },
                {
                    "市名": "马鞍山",
                    "编码": "101220501"
                },
                {
                    "市名": "安庆",
                    "编码": "101220601"
                },
                {
                    "市名": "宿州",
                    "编码": "101220701"
                },
                {
                    "市名": "阜阳",
                    "编码": "101220801"
                },
                {
                    "市名": "亳州",
                    "编码": "101220901"
                },
                {
                    "市名": "黄山",
                    "编码": "101221001"
                },
                {
                    "市名": "滁州",
                    "编码": "101221101"
                },
                {
                    "市名": "淮北",
                    "编码": "101221201"
                },
                {
                    "市名": "铜陵",
                    "编码": "101221301"
                },
                {
                    "市名": "宣城",
                    "编码": "101221401"
                },
                {
                    "市名": "六安",
                    "编码": "101221501"
                },
                {
                    "市名": "巢湖",
                    "编码": "101221601"
                },
                {
                    "市名": "池州",
                    "编码": "101221701"
                },
                {
                    "市名": "蚌埠",
                    "编码": "101220201"
                }
            ]
        },
        {
            "省": "浙江",
            "市": [{
                    "市名": "杭州",
                    "编码": "101210101"
                },
                {
                    "市名": "舟山",
                    "编码": "101211101"
                },
                {
                    "市名": "湖州",
                    "编码": "101210201"
                },
                {
                    "市名": "嘉兴",
                    "编码": "101210301"
                },
                {
                    "市名": "金华",
                    "编码": "101210901"
                },
                {
                    "市名": "绍兴",
                    "编码": "101210501"
                },
                {
                    "市名": "台州",
                    "编码": "101210601"
                },
                {
                    "市名": "温州",
                    "编码": "101210701"
                },
                {
                    "市名": "丽水",
                    "编码": "101210801"
                },
                {
                    "市名": "衢州",
                    "编码": "101211001"
                },
                {
                    "市名": "宁波",
                    "编码": "101210401"
                }
            ]
        },

        {
            "省": "辽宁",
            "市": [{
                    "市名": "沈阳",
                    "编码": "101070101"
                },
                {
                    "市名": "鞍山",
                    "编码": "101070301"
                },
                {
                    "市名": "抚顺",
                    "编码": "101070401"
                },
                {
                    "市名": "本溪",
                    "编码": "101070501"
                },
                {
                    "市名": "丹东",
                    "编码": "101070601"
                },
                {
                    "市名": "葫芦岛",
                    "编码": "101071401"
                },
                {
                    "市名": "营口",
                    "编码": "101070801"
                },
                {
                    "市名": "阜新",
                    "编码": "101070901"
                },
                {
                    "市名": "辽阳",
                    "编码": "101071001"
                },
                {
                    "市名": "铁岭",
                    "编码": "101071101"
                },
                {
                    "市名": "朝阳",
                    "编码": "101071201"
                },
                {
                    "市名": "盘锦",
                    "编码": "101071301"
                },
                {
                    "市名": "大连",
                    "编码": "101070201"
                },
                {
                    "市名": "锦州",
                    "编码": "101070701"
                }
            ]
        }
    ]
})";*/

static QVector<Province> provinces;
static QMap<QString, QString> cityNameToCode;

void parseCityData()
{
    QFile file(":/citydata/citydata.json");
    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        qDebug() << "can't open error!";
        return;
    }
    QTextStream textstream(&file);
    textstream.setEncoding(QStringConverter::Utf8);
    QString cityDataJsonString = textstream.readAll();
    file.close();
    QJsonDocument doc = QJsonDocument::fromJson(cityDataJsonString.toUtf8());
    QJsonObject obj = doc.object();
    QJsonArray provs = obj["城市代码"].toArray();
    qDebug() << "chk";
    for(const QJsonValue& prov : provs)
    {
        QVector<City> citys;
        for(const QJsonValue& city : prov["市"].toArray())
        {
            citys.push_back({city["市名"].toString(), city["编码"].toString()});
            cityNameToCode[city["市名"].toString()] = city["编码"].toString();
        }
        provinces.push_back({prov["省"].toString(), citys});
    }

    // for(const Province& p : provinces)
    // {
    // 	qDebug() << p.provinceName;
    // 	for(const City& c : p.citys)
    // 	{
    // 		qDebug() << c.cityName << " " << c.cityCode;
    // 	}
    // }
}

QVector<Province> getProvinces()
{
    if(provinces.empty()) parseCityData();
    return provinces;
}

QString getCityCodeByName(const QString& cityName)
{
    if(provinces.empty()) parseCityData();
    return cityNameToCode[cityName];
}
